在之前的章節中,我們詳細介紹了如何為Quarkus進行環境建置,包括GraalVM和Native Image的使用。這麼做的目的,是希望開發者能夠透過深入了解系統運行的原理,在面對效能瓶頸時,不僅限於程式層面來找尋問題,還能更全面地分析整個系統的效能。掌握底層技術有助於你在未來優化Quarkus應用的效能與資源使用。
接下來,在進入Quarkus的開發之前,我們將首先帶你了解網路協定格式。掌握這些概念,特別是與安全通信相關的部分,會讓你在設計和實現API時更具深度理解和直覺。
在後端系統領域,安全且高效的通信是每個開發者必須掌握的技能。接下來的幾篇文章將針對常見的HTTPS通信格式和RESTful API進行介紹,並幫助你理解如何SSL/TLS技術與數據安全關聯性。我們還將介紹RESTEasy框架與OpenAPI規範,讓你能夠快速、高效地構建並文檔化RESTful API。
在現代後端系統開發中,HTTPS為最常見的資料傳輸協議。無論是網頁應用、API通信,還是用戶身份驗證,HTTPS都扮演著保護數據隱私和通信安全的關鍵角色。HTTPS通過加密數據傳輸,保障通信過程中的資料不被竊聽或篡改。要真正理解HTTPS的運作機制,我們首先需要了解其背後的基礎技術:SSL(Secure Sockets Layer)和TLS(Transport Layer Security)。
SSL和TLS是實現安全通信的核心協議,它們負責在客戶端和伺服器之間建立加密通道,確保數據的機密性、完整性和身份驗證。掌握SSL/TLS的原理和運作方式,能幫助我們更好地理解HTTPS如何在這些技術之上進一步增強通信的安全性。因此,在深入探討HTTPS之前,先了解SSL和TLS的運作是至關重要的一步,這將使你能夠應對各種網絡安全挑戰,並在後端系統中構建更安全的應用。
SSL(Secure Sockets Layer)是一種加密技術,用於保障網絡連接的安全。簡單來說,它在客戶端和服務器之間建立了一個安全通道,保護其間傳輸的所有數據。從技術上講,SSL利用了多種密碼學方法,包括公鑰加密(用於驗證伺服器和客戶端的身份)、對稱加密(保護數據的機密性)和消息認證碼(確保數據的完整性)。
了解SSL的基本設計目的是確保加密連線應用場景中的安全。接下來,我們將介紹SSL的分層設計,了解這些層次的職責有助於你更好地解決可能出現的問題。
SSL的主要分層如下:
應用層(Application Layer)(OSI的第七層):這一層處理應用數據,例如HTTP請求和響應。當你訪問HTTPS網站時,網頁內容(如HTML、CSS、JavaScript等)以及HTTP請求和響應都由這一層處理。
SSL/TLS層(OSI 應用層-傳輸層 Session層 ):這一層負責SSL/TLS協議的運作,進一步劃分為兩部分:
握手層(Handshake Layer):包括握手協議、ChangeCipherSpec協議和警報協議。在SSL/TLS連接建立過程中,這些協議協商安全參數、變更加密設置並處理警報或錯誤。
握手協議 (Handshake Protocol):客戶端與伺服器通過握手協議建立安全連接,確認身份並協商加密參數。在這個過程中,客戶端和伺服器會互相確認身份,並協商一組安全參數(如加密算法和密鑰)以便未來的通信。這個協議也管理著伺服器和客戶端之間的證書驗證過程。
Change Cipher Spec協議: 握手完成後,這個協議用來通知雙方將使用新協商的加密參數進行通信。通知對方:從現在開始,將會使用新協商好的安全參數進行通信。
警報協議 (Alert Protocol): 用於傳遞警報消息,例如身份驗證失敗或連接錯誤。這些警報可以表示各種不同的問題,包括嚴重的問題(例如無法驗證對方的證書)或者可能需要關閉連接的問題。Alert Protocol能使對方了解何種錯誤或問題發生,並採取相應的行動。
Record Layer:將應用層數據(如HTTP消息)打包並加密,確保數據完整性和機密性。記錄層還檢測潛在傳輸錯誤並發出警報。
傳輸層(TCP,OSI的第四層):此層負責將加密的數據進行分包傳輸,並確保數據包按正確順序到達目的地。
網絡層(IP,OSI的第三層):負責將數據包從一台計算機傳輸到另一台計算機,並處理路由及數據包分段等問題。
需要注意的是,SSL參照的是TCP/IP模型而非OSI七層模型。TCP/IP模型分為四個層次:網絡介面層、網際層、傳輸層和應用層,這些層次對應於OSI模型的部分或全部層次。
Transport Layer Security (TLS) 是一種廣泛採用的安全通訊協定,其實他是SSL 3.0的延續。由於SSL 3.0存在一些安全問題,因此在1999年時,網際網路工程任務組(IETF)推出了一個新的協議,稱為傳輸層安全性(Transport Layer Security,縮寫為TLS)。並將其視為SSL 3.0的延續。
TLS協議中的各層功能如下圖:
應用層(Application Layer): 在TLS(Transport Layer Security)協議中,這是最上層,負責處理特定類型的通信協議,如HTTP、FTP、SMTP等。該層接收來自用戶的數據並將其傳遞給下一層。
Handshake, Change Cipher Spec, Alert, and Application Data: 這些是在SSL/TLS層中的特定協議,這些協議都在同一層級運行,這些協定位於SSL/TLS層中,負責在雙方之間建立安全連接和管理通信過程中的加密方式:
TLS記錄協定(TLS Record Protocol):記錄協定負責將上一層(握手、Change Cipher Spec、警報、應用數據)的數據包裝成可傳輸的數據包。每個數據包包含內容類型、協定版本、長度等信息,並填充了實際的數據內容及消息認證碼(MAC)以確保完整性。
Transport Layer: 傳輸層將數據分割為獨立的數據包並通過網路傳輸。通常使用TCP(傳輸控制協定)或UDP(使用者數據報協定)進行傳輸。TCP確保數據包按順序到達,並進行可靠的傳輸,而UDP則提供快速但不保證可靠性的傳輸方式。
Data Link Layer: 在這一層,數據包被封裝成幀(Frames),並通過實體網絡進行傳輸。數據鏈路層同時負責錯誤檢測與修正,以及MAC(媒體訪問控制)地址的處理,確保設備之間的正確通信。
Physical Layer: 物理層是網路模型中的最底層,負責將數據轉換為物理信號(如電信號或光信號)並通過物理媒介(如電纜、光纖或無線電波)傳輸。
我們了解了SSL和TLS作為安全通信協定的發展歷程。TLS是SSL的改進版本,通過握手協定、加密層和傳輸層來確保數據的機密性、完整性以及身份驗證。無論是SSL還是TLS,這些層次都旨在保護網絡通信中的數據免受潛在的攻擊。
稍微用表格比較一下SSL與TLS差異
特性\協議 | SSL | TLS |
---|---|---|
協議版本 | SSL 2.0、SSL 3.0 | TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3 |
密碼套件 | 較少的選擇 | 更廣的選擇,包括強大的加密算法 |
安全性 | SSL 3.0已被證明存在安全漏洞 | 較新的TLS版本被認為更安全 |
握手方法 | 較為簡單 | 較為複雜,但更安全 |
握手速度 | 較快 | 較慢,但提供更好的安全性 |
向後兼容性 | 僅與自身的早期版本兼容 | 與自身的早期版本和SSL 3.0兼容 |
SSL 2.0(1995年):SSL的第二個版本存在多項嚴重的安全漏洞,例如,它允許中間人攻擊者降低連線的安全級別,導致使用者更容易受到攻擊。
簡單說明一下中間人攻擊的運作。在SSL/TLS握手過程中,客戶端和伺服器會協商選擇使用的協定版本和加密套件。在理想情況下,雙方會選擇最安全的版本和加密方式。然而,為了確保向後相容性,許多客戶端和伺服器會接受較舊且安全性較低的協定版本和加密套件。
在中間人攻擊(Man-in-the-Middle Attack,簡稱MitM攻擊)中,攻擊者可以攔截並修改客戶端和伺服器之間的通訊。例如,當客戶端發送支援的協定版本和加密套件列表給伺服器時,攻擊者可以修改這個訊息,讓伺服器認為客戶端只支援較舊且不安全的版本和套件。因此,伺服器可能會選擇使用這些不安全的設置來與客戶端通訊,這樣攻擊者更容易解密或破壞通訊。
這種攻擊方式被稱為「協商降級攻擊」,因為它迫使客戶端和伺服器在協商通訊設置時,採用較低的安全級別。需要注意的是,這種攻擊必須依賴攻擊者能夠攔截並修改雙方的通訊,因此它是一種較為進階的攻擊手法。
在中間人攻擊中,攻擊者可以進行以下操作:
接下來,我們將探討HTTPS,這是HTTP協議的安全升級版。HTTPS通過結合SSL/TLS來加密傳輸,確保網頁和伺服器之間的通信安全。因此,在掌握了SSL與TLS的基本運作後,理解HTTPS的工作原理將變得更加直觀且容易。